package com.wlf.admin.common.dto;

import cn.hutool.crypto.digest.MD5;
import lombok.Getter;

/**
 * 常量枚举在一起的类
 */
public class Const {

    /**
     * 用户密码加密用Md5
     */
    public static MD5 md5 = MD5.create();

    /**
     * 功能描述: 登录设备
     *
     * @author wlf 2023/9/13 13:48
     */
    public enum LoginDevice {
        PC
    }

    /**
     * 自定义序列
     */
    @Getter
    public enum SerialType {
        // 登陆序号
        LOGIN_NO(4, RestType.NONE);

        // 序列长度，长度不够补零
        final Integer length;
        // 重置类别
        final RestType restType;

        SerialType(Integer length, RestType restType) {
            this.length = length;
            this.restType = restType;
        }

        public RestType getType() {
            return restType;
        }

        @Getter
        public enum RestType {
            //  每天重置。。。。最后一个为不重置；
            // 每天重置或者每月，每年重置等，作为主键时前面需要带上相应的日期，不然，就没有不然了。
            // 就是如果是每年重置主键应该是Year+Serial
            // 就是如果是每月重置主键应该是Year+Month+Serial
            // 就是如果是每天重置主键应该是Year+Month+Day+Serial
            // 设置不重置时，序列长度最好设置长点。不然可能会不够用。
            DAY("yyyy-MM-dd"), MONTH("yyyy-MM"), YEAR("yyyy"), NONE("");

            private final String format;

            RestType(String format) {
                this.format = format;
            }

        }
    }

    /**
     * 菜单类型
     */
    @Getter
    public enum MenuType {
        menu("菜单"),
        button("按钮"),
        none("隐藏"),
        ;
        private final String desc;

        MenuType(String desc) {
            this.desc = desc;
        }
    }

    /**
     * 用户类型
     */
    @Getter
    public enum UserStatus {
        normal("正常"),
        invalid("无效"),
        ;
        private final String desc;

        UserStatus(String desc) {
            this.desc = desc;
        }
    }


    /**
     * 功能描述: 定时任务bean需要加上这个即可在前台获取
     */
    public static final String TaskBeanKey = "task_";

    /**
     * 任务日志删除类别
     */
    public enum DelType {
        /**
         * 删除全部
         */
        ALL,
        /**
         * 一个月前
         */
        YI,
        /**
         * 三个月前
         */
        SAN,
        /**
         * 六个月前
         */
        LIU,
        /**
         * 一年前
         */
        YEAR
    }

    @Getter
    public enum JobType {
        cron(0,"cron模式"),
        interval(1,"间隔模式"),
        ;
        private final Integer value;
        private final String desc;

        JobType(Integer value, String desc) {
            this.value = value;
            this.desc = desc;
        }
    }


    @Getter
    public enum IntervalUnit {
        _0(0,"毫秒"),
        _1(1,"秒"),
        _2(2,"分钟"),
        _3(3,"小时"),
        ;
        private final Integer value;
        private final String desc;

        IntervalUnit(Integer value, String desc) {
            this.value = value;
            this.desc = desc;
        }
    }
}
